package cn.jacksigxu.min3halla.init;

import cn.jacksigxu.min3halla.MHMod;
import cn.jacksigxu.min3halla.block.*;
import cn.jacksigxu.min3halla.block.drink.BasicDrinkBlock;
import cn.jacksigxu.min3halla.block.drink.MutableAlcoholDrinkBlock;
import cn.jacksigxu.min3halla.block.drink.SizedDrinkBlock;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;

public class MHBlocks {

    // TODO 添加brandtini和frothy water的模型，现在是复用的

    public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MHMod.MOD_ID);

    public static final RegistryObject<Block> DRINK_MIXER = BLOCKS.register("drink_mixer", DrinkMixerBlock::new);
    public static final RegistryObject<Block> FERMENT_BARREL = BLOCKS.register("ferment_barrel", FermentBarrelBlock::new);
    public static final RegistryObject<Block> BTC_FILLING_MACHINE = BLOCKS.register("btc_filling_machine", BTCFillingMachineBlock::new);

    public static final RegistryObject<Block> BTC_CAN_BLOCK = BLOCKS.register("btc_can", SmallIngredientCanBlock::new);
    public static final RegistryObject<Block> ADELHYDE_BLOCK = BLOCKS.register("adelhyde", SmallIngredientCanBlock::new);
    public static final RegistryObject<Block> BRONSON_EXTRACT_BLOCK = BLOCKS.register("bronson_extract", SmallIngredientCanBlock::new);
    public static final RegistryObject<Block> POWDERED_DELTA_BLOCK = BLOCKS.register("powdered_delta", SmallIngredientCanBlock::new);
    public static final RegistryObject<Block> FLANERGIDE_BLOCK = BLOCKS.register("flanergide", SmallIngredientCanBlock::new);
    public static final RegistryObject<Block> KARMOTRINE_BLOCK = BLOCKS.register("karmotrine", SmallIngredientCanBlock::new);

    public static final RegistryObject<Block> HYPER_ACID_X_BLOCK = BLOCKS.register("hyper_acid_x", IngredientCanBlock::new);
    public static final RegistryObject<Block> GLITCH_LIQUID_BLOCK = BLOCKS.register("glitch_liquid", IngredientCanBlock::new);

    public static final RegistryObject<Block> FRIED_RICE_BLOCK = BLOCKS.register("fried_rice", FriedRiceBlock::new);

    public static final RegistryObject<Block> BAD_TOUCH_BLOCK = BLOCKS.register("bad_touch",
            () -> new SizedDrinkBlock(MHBlockShapes.BAD_TOUCH, MHBlockShapes.BAD_TOUCH_BIG));
    public static final RegistryObject<Block> BEER_BLOCK = BLOCKS.register("beer",
            () -> new SizedDrinkBlock(Block.box(2.5, 0, 2.5, 13.5, 16, 13.5), Block.box(0, 0, 0, 16, 24, 16)));
    public static final RegistryObject<Block> BLEEDING_JANE_BLOCK = BLOCKS.register("bleeding_jane",
            () -> new SizedDrinkBlock(Block.box(5, 0, 5, 11, 16, 11), Block.box(3.5, 0, 3.5, 12.5, 24, 12.5)));
    public static final RegistryObject<Block> BLOOM_LIGHT_BLOCK = BLOCKS.register("bloom_light",
            () -> new SizedDrinkBlock(Block.box(4, 0, 4, 12, 16, 12), Block.box(2, 0, 2, 14, 24, 14)));
    public static final RegistryObject<Block> BLUE_FAIRY_BLOCK = BLOCKS.register("blue_fairy",
            () -> new MutableAlcoholDrinkBlock(MHBlockShapes.BAD_TOUCH, MHBlockShapes.BAD_TOUCH_BIG));
    public static final RegistryObject<Block> BRANDTINI_BLOCK = BLOCKS.register("brandtini",
            () -> new SizedDrinkBlock(Block.box(4, 0, 4, 12, 16, 12), Block.box(2, 0, 2, 14, 24, 14)));
    public static final RegistryObject<Block> COBALT_VELVET_BLOCK = BLOCKS.register("cobalt_velvet",
            () -> new SizedDrinkBlock(Block.box(3, 0, 3, 13, 9.5, 13), MHBlockShapes.CREVICE_SPIKE_BIG));
    public static final RegistryObject<Block> CREVICE_SPIKE_BLOCK = BLOCKS.register("crevice_spike",
            () -> new MutableAlcoholDrinkBlock(MHBlockShapes.CREVICE_SPIKE, Block.box(0, 0, 0, 16, 19, 16)));
    public static final RegistryObject<Block> FLAMING_MOAI_BLOCK = BLOCKS.register("flaming_moai",
            () -> new BasicDrinkBlock(Block.box(4, 0, 4, 10, 16, 10)));
    public static final RegistryObject<Block> FLUFFY_DREAM_BLOCK = BLOCKS.register("fluffy_dream",
            () -> new MutableAlcoholDrinkBlock(Block.box(4, 0, 4, 12, 16, 12), Block.box(1, 0, 1, 15, 24, 15)));
    public static final RegistryObject<Block> FRINGE_WEAVER_BLOCK = BLOCKS.register("fringe_weaver",
            () -> new SizedDrinkBlock(Block.box(4, 0, 4, 12, 16, 12), Block.box(2, 0, 2, 14, 24, 14)));
    public static final RegistryObject<Block> FROTHY_WATER_BLOCK = BLOCKS.register("frothy_water",
            () -> new SizedDrinkBlock(Block.box(2.5, 0, 2.5, 13.5, 16, 13.5), Block.box(0, 0, 0, 16, 24, 16)));
    public static final RegistryObject<Block> GRIZZLY_TEMPLE_BLOCK = BLOCKS.register("grizzly_temple",
            () -> new MutableAlcoholDrinkBlock(Block.box(4, 0, 4, 12, 16, 12), Block.box(1, 0, 1, 15, 24, 15)));
    public static final RegistryObject<Block> GUT_PUNCH_BLOCK = BLOCKS.register("gut_punch",
            () -> new MutableAlcoholDrinkBlock(Block.box(3, 0, 3, 13, 13, 13), Block.box(0.5, 0, 0.5, 15.5, 20, 15.5)));
    public static final RegistryObject<Block> MARSBLAST_BLOCK = BLOCKS.register("marsblast",
            () -> new BasicDrinkBlock(MHBlockShapes.BAD_TOUCH));
    public static final RegistryObject<Block> MERCURYBLAST_BLOCK = BLOCKS.register("mercuryblast",
            () -> new MutableAlcoholDrinkBlock(MHBlockShapes.BAD_TOUCH, MHBlockShapes.BAD_TOUCH_BIG));
    public static final RegistryObject<Block> MOONBLAST_BLOCK = BLOCKS.register("moonblast",
            () -> new SizedDrinkBlock(MHBlockShapes.BAD_TOUCH, MHBlockShapes.BAD_TOUCH_BIG));
    public static final RegistryObject<Block> PIANO_MAN_BLOCK = BLOCKS.register("piano_man",
            () -> new BasicDrinkBlock(Block.box(4, 0, 4, 12, 20, 12)));
    public static final RegistryObject<Block> PIANO_WOMAN_BLOCK = BLOCKS.register("piano_woman",
            () -> new BasicDrinkBlock(Block.box(4, 0, 4, 12, 18, 12)));
    public static final RegistryObject<Block> PILE_DRIVER_BLOCK = BLOCKS.register("pile_driver",
            () -> new SizedDrinkBlock(MHBlockShapes.CREVICE_SPIKE, Block.box(0, 0, 0, 16, 19, 16)));
    public static final RegistryObject<Block> SPARKLE_STAR_BLOCK = BLOCKS.register("sparkle_star",
            () -> new MutableAlcoholDrinkBlock(Block.box(4, 0, 4, 12, 16, 12), Block.box(1, 0, 1, 15, 24, 15)));
    public static final RegistryObject<Block> SUGAR_RUSH_BLOCK = BLOCKS.register("sugar_rush",
            () -> new MutableAlcoholDrinkBlock(MHBlockShapes.BAD_TOUCH, MHBlockShapes.BAD_TOUCH_BIG));
    public static final RegistryObject<Block> SUNSHINE_CLOUD_BLOCK = BLOCKS.register("sunshine_cloud",
            () -> new MutableAlcoholDrinkBlock(Block.box(3, 0, 3, 13, 9, 13), Block.box(0.5, 0, 0.5, 15.5, 13.5, 15.5)));
    public static final RegistryObject<Block> SUPLEX_BLOCK = BLOCKS.register("suplex",
            () -> new MutableAlcoholDrinkBlock(MHBlockShapes.CREVICE_SPIKE, MHBlockShapes.CREVICE_SPIKE_BIG));
    public static final RegistryObject<Block> ZEN_STAR_BLOCK = BLOCKS.register("zen_star",
            () -> new BasicDrinkBlock(Block.box(3, 0, 3, 13, 9, 13)));

    public static final RegistryObject<Block> MULAN_TEA_BLOCK = BLOCKS.register("mulan_tea",
            () -> new BasicDrinkBlock(Block.box(4.5, 0, 4.5, 11.5, 14, 11.5)));
    public static final RegistryObject<Block> A_FEDORA_BLOCK = BLOCKS.register("a_fedora",
            () -> new BasicDrinkBlock(Block.box(4, 0, 4, 12, 5, 12)));
    public static final RegistryObject<Block> RUM_BLOCK = BLOCKS.register("rum",
            () -> new BasicDrinkBlock(MHBlockShapes.RUM_SHAPE));
    public static final RegistryObject<Block> ABSINTHE_BLOCK = BLOCKS.register("absinthe",
            () -> new BasicDrinkBlock(MHBlockShapes.ABSINTHE_SHAPE));

    public static final RegistryObject<Block> SEPTWOLVES_BLOCK = BLOCKS.register("septwolves",
            () -> new SizedDrinkBlock(MHBlockShapes.BAD_TOUCH, MHBlockShapes.BAD_TOUCH_BIG));
    public static final RegistryObject<Block> ALARM_LAMP_BLOCK = BLOCKS.register("alarm_lamp",
            () -> new BasicDrinkBlock(Block.box(3, 0, 3, 13, 11, 13)));
    public static final RegistryObject<Block> SUPERB_BASKETBALL_BLOCK = BLOCKS.register("superb_basketball",
            () -> new BasicDrinkBlock(Block.box(3, 0, 3, 13, 11, 13)));
    public static final RegistryObject<Block> FOX_WINE_BLOCK = BLOCKS.register("fox_wine",
            () -> new BasicDrinkBlock(Block.box(3.5, 0, 3, 12.5, 11, 13), Block.box(3, 0, 3.5, 13, 11, 12.5)));

    public static final RegistryObject<Block> ERROR_DRINK_BLOCK = BLOCKS.register("error_drink",
            () -> new BasicDrinkBlock(Block.box(3, 0, 3, 13, 10, 13)));
}
